<?php
/**
 * Websocket Server
 */
require_once('./vendor/autoload.php');

set_time_limit(0);
$host = 'localhost';
$port = '7002';
$socket = new \HemiFrame\Lib\WebSocket\WebSocket($host, $port);
$socket->setEnableLogging(true);

//Events
//$socket->on("connect", function(\HemiFrame\Lib\WebSocket\Client $client) use ($socket) {
//    // Checks
//    if (!$client || !$socket) { return false; }
//    if (empty($client->getPath())) { return false; }
//    if (preg_match("/(\/\?token=)[a-z0-9]*/i", $client->getPath(), $match)) {
//        // Variables
//        $token = str_replace("/?token=", "", $match[0]) ?: "";
//
//        // Authorize Client
//        authorize($client, $token);
//    }
//});
//$socket->on("receive", function (\HemiFrame\Lib\WebSocket\Client $client, $data) use ($socket) {
//    // Checks
//    if (!$client || !$socket) { return false; }
//    if (empty($data) || !$decoded = json_decode($data, true)) { return false; }
//    if ($client->getAuthorized() === false) { return false; }
//
//    // Variables
//    $function = cleanInput($decoded['function']) ?: "";
//
//    // Function Navigator
//    if ($function === 'broadcast') {
//        broadcast($client, $decoded);
//    } else if ($function === 'test') {
//        test($client);
//    } else {
//        return false;
//    }
//});
$socket->on('receive', function (\HemiFrame\Lib\WebSocket\Client $client, $data) use ($socket) {
    echo $client->getId().' send msg '.$data."\n";
    $data = json_decode($data, true);
    if ($data['event'] == 'broadcast') {
        $clients = $socket->getClients();
        foreach ($clients as $item) {
            $data = [
                'bitcoin' => '6389.06534240',
                'ethereum' => '192.93111286'
            ];
            $socket->sendData($item, $item->getId().' '.json_encode($data), false);
        }
    }
});

//Run
$socket->startServer();